#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

int n;
struct qq
{
	int x,y,g;
}q[6],t[6];

struct aa
{
	int a[5][7];
	aa(){memset(a,0,sizeof(a));}
	bool ok(int x,int y) 
	{
		if (x<0||x>4||y<0||y>6) return false;
		return true;
	}
	bool pan() 
	{
		for (int i=0;i<5;i++) if (a[i][0]) return false;
		return true;
	}
	bool stability()
	{
		for (int i=0;i<5;i++) 
			for (int j=1;j<7;j++) if (a[i][j]&&!a[i][j-1]) return false;
		for (int i=0;i<5;i++)
			for (int j=0;j<7;j++) if (a[i][j])
			{
			if (ok(i-1,j)&&ok(i+1,j)&&a[i-1][j]==a[i][j]&&a[i][j]==a[i+1][j]) return false;
			if (ok(i,j-1)&&ok(i,j+1)&&a[i][j-1]==a[i][j]&&a[i][j]==a[i][j+1]) return false;	
			}
		return true;
	}
	void drop() 
	{
		for (int t,x=0;x<5;x++) 
		{
			t=0;
			for (int y=0;y<7;y++) if (a[x][y]) a[x][t++]=a[x][y];
			for (int y=t;y<7;y++) a[x][y]=0;
		}
	}
	void clear()
	{
		static bool b[5][7];
		memset(b,false,sizeof(b));
		for (int x=0;x<5;x++)
		for (int y=0;y<7;y++) if (a[x][y])
		{
		if (ok(x-2,y)&&ok(x-1,y)&&a[x-2][y]==a[x][y]&&a[x-1][y]==a[x][y]) b[x][y]=true;else
		if (ok(x-1,y)&&ok(x+1,y)&&a[x-1][y]==a[x][y]&&a[x+1][y]==a[x][y]) b[x][y]=true;else
		if (ok(x+1,y)&&ok(x+2,y)&&a[x+1][y]==a[x][y]&&a[x+2][y]==a[x][y]) b[x][y]=true;else
		if (ok(x,y-2)&&ok(x,y-1)&&a[x][y-2]==a[x][y]&&a[x][y-1]==a[x][y]) b[x][y]=true;else
		if (ok(x,y-1)&&ok(x,y+1)&&a[x][y-1]==a[x][y]&&a[x][y+1]==a[x][y]) b[x][y]=true;else
		if (ok(x,y+1)&&ok(x,y+2)&&a[x][y+1]==a[x][y]&&a[x][y+2]==a[x][y]) b[x][y]=true;
		}
		for (int x=0;x<5;x++)
			for (int y=0;y<7;y++) if (b[x][y]) a[x][y]=0;
	}
	void work()
	{
		while (!stability()) 
		{
			drop();
			clear();
		}
	}
}S;
void dfs(aa &a,int step) 
{
	if (step==n+1) 
	{
		if (a.pan()) for (int i=1;i<=n;i++) q[i]=t[i];
		return ;
	}
	for (int x=0;x<5;x++)
		for (int y=0;y<7&&a.a[x][y];y++) 
		{
			aa tmp;
			if (x<4)
			{
				tmp=a;
				swap(tmp.a[x][y],tmp.a[x+1][y]);
				tmp.work();
				t[step]=(qq){x,y,1};
				dfs(tmp,step+1);
				if (q[1].g!=0) return ;
			}
			if (x>0) 
			{
				tmp=a;
				if (tmp.a[x-1][y]) continue;
				swap(tmp.a[x][y],tmp.a[x-1][y]);
				tmp.work();
				t[step]=(qq){x,y,-1};
				dfs(tmp,step+1); 
				if (q[1].g!=0) return ;
			}
		}
}

int main()
{
	scanf("%d",&n);
	for (int t,x,i=0;i<5;i++) 
	{
		t=0;
		do
		{
			scanf("%d",&x);
			if (x) S.a[i][t++]=x;
		}while (x);
	}
		
	dfs(S,1);
	
	if (q[1].g==0) printf("-1");
	else  for (int i=1;i<=n;i++) printf("%d %d %d\n",q[i].x,q[i].y,q[i].g);
	
	return 0;
}
